#include <stdio.h>
#include <assert.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>


int main()
{
    pid_t id = fork();
    assert(id!=-1);
    if(id==0)
    {
        //子进程
        int cnt=5;
        while(cnt)
        {
            printf("子进程：%d，父进程：%d，cnt：%d\n",getpid(),getppid(),cnt--);
            sleep(3);
            //bint *p=0;
            //*p=10;     //野指针问题
        }
        exit(6);
    }
    while(1)
    {
        int status=0;
        pid_t ret=waitpid(id, &status, WNOHANG);
        if(ret==0)
        {
            printf("waitpid调用成功，子进程没有结束\n");
        }
        else if(ret>0)
        {
            printf("waitpid调用成功，子进程结束：%d, 退出码：%d，信号：%d\n", id, (status>>8) & 0xFF, status & 0x7F);
            break;
        }
        else
        {
            printf("出现错误\n");
            break;
        }
        sleep(1);
    }
 
    return 0;
}
